#include "tile.h"
#include <QPainterPath>

Tile::Tile(int value, QWidget *parent,const QColor color) : QWidget(parent), tileValue(value), tileColor(Qt::white) { // 假设默认颜色为白色
    // 其他初始化代码（如果有）
    setMinimumSize(40,40);
    setColor(color);
    setValue(value);
}

void Tile::setValue(int value) {
    tileValue = value;
    update(); // 更新界面，触发paintEvent
}

void Tile::setColor(const QColor &color) {
    tileColor = color;
    update(); // 更新瓦片以触发重绘
}

int Tile::get_value()
{
    return tileValue;
}
/*
浅粉色 (Light Pink): #FFC0CB
浅黄色 (Light Yellow): #FFFFE0
米白色 (Beige): #F5F5DC
浅橙色 (Light Orange): #FFA500
浅桃红色 (Light Peach): #FFDAB9
浅杏色 (Light Apricot): #FDDEB9
浅灰色 (Light Gray): #D3D3D3
银色 (Silver): #C0C0C0
米灰色 (Beige Gray): #F0E68C
中灰色 (Medium Gray): #808080
石板灰色 (Slate Gray): #708090

浅天蓝色 (Light Sky Blue): #87CEEB
浅海蓝色 (Light Sea Green): #20B2AA
浅绿色 (Light Green): #90EE90
淡蓝色 (Pale Blue): #AFEEEE
浅蓝紫色 (Light Blue Violet): #8A2BE2
深灰色 (Dark Gray): #4F4F4F
深绿色 (Dark Green): #006400
海军蓝色 (Navy Blue): #000080
黑色 (Black): #000000
*/
QColor lightPink(QString str)
{
    QString hexColor = str; // 原始十六进制颜色值
    if (hexColor.startsWith('#')) {
        hexColor.remove(0, 1); // 去掉 '#'
    }

    // 确保颜色值至少有 6 个字符（RRGGBB）
    if (hexColor.length() == 6) {
        bool ok;
        int red = hexColor.mid(0, 2).toInt(&ok, 16); // 转换前两个字符为十六进制整数
        int green = hexColor.mid(2, 2).toInt(&ok, 16); // 转换接下来两个字符
        int blue = hexColor.mid(4, 2).toInt(&ok, 16); // 转换最后两个字符

        if (ok) {
            // 现在你可以使用这些值来创建一个 QColor 对象
            QColor color(red, green, blue);
             return color;
            //qDebug() << "Color created with RGB values:" << color.red() << color.green() << color.blue();
        }
    }
}

QColor get_color(int num)
{
    switch(num)
    {
        case 2:
            return  lightPink("#FFC0CB");
        case 4:
            return  lightPink("#FFFFE0");
        case 8:
            return  lightPink("#D3D3D3");
        case 16:
            return  lightPink("#FFA500");
        case 32:
            return  lightPink("#FFDAB9");
        case 64:
            return  lightPink("#FDDEB9");
        case 128:
            return  lightPink("#C0C0C0");
        case 256:
            return  lightPink("#F0E68C");
        case 512:
            return  lightPink("#87CEEB");
        case 1024:
            return  lightPink("#20B2AA");
        case 2048:
            return  lightPink("#90EE90");
        case 4096:
            return  lightPink("#000080");
    }

    return  lightPink("#ffffff");
}

void Tile::paintEvent(QPaintEvent *event) {
    QPainter painter(this);
    painter.setRenderHint(QPainter::Antialiasing);
/*  //边框设置不完整取消算了
    QPainterPath path;
    path.addRect(rect()); // 添加瓦片的完整矩形到路径

    // 调试信息：绘制瓦片的边界
    painter.setPen(QPen(Qt::black, 4)); // 红色边框，宽度为4
    painter.drawRect(rect());
*/
    // 使用 tileColor 来填充瓦片
    painter.fillRect(rect(), get_color(tileValue));

    // 设置字体大小和样式
    QFont font = painter.font();
    font.setPointSize(20); // 假设设置字体大小为20点
    painter.setFont(font);

    // 在瓦片上绘制不等于的数字
    if(tileValue != 0){
        painter.setPen(Qt::black); // 设置画笔颜色为黑色
        QString text = QString::number(tileValue);
        painter.drawText(rect(), Qt::AlignCenter, text); // 在瓦片中心绘制数字
    }

    // 调试信息：绘制文本边界框
    //QRectF textRect = painter.boundingRect(rect(), Qt::AlignCenter, text);
    //painter.setPen(QPen(Qt::green, 1)); // 绿色边框，宽度为1
    //painter.drawRect(textRect.translated(rect().center() - textRect.center()));
}

